package org.example.StacksAndQueues;

import java.util.Stack;

public class Evaluate_inverse_Polish_expression {
    public static void main(String[] args) {
        //逆波兰表达式求值

        //给你一个字符串数组 tokens ，表示一个根据 逆波兰表示法 表示的算术表达式。
        //请你计算该表达式。返回一个表示表达式值的整数。
        //注意：
        //有效的算符为 '+'、'-'、'*' 和 '/' 。
        //每个操作数（运算对象）都可以是一个整数或者另一个表达式。
        //两个整数之间的除法总是 向零截断 。
        //表达式中不含除零运算。
        //输入是一个根据逆波兰表示法表示的算术表达式。
        //答案及所有中间计算结果可以用 32 位 整数表示。
        String[] tokens = {"2", "1", "+", "3", "*"};
        System.out.println(evalRPN1(tokens));
    }

    public static int evalRPN1(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        Integer i;
        Integer j;
        for (String token : tokens) {
            switch (token) {
                case "+":
                    stack.push(stack.pop() + stack.pop());
                    break;
                case "-":
                    i = stack.pop();
                    j = stack.pop();
                    stack.push(j - i);
                    break;
                case "*":
                    stack.push(stack.pop() * stack.pop());
                    break;
                case "/":
                    i = stack.pop();
                    j = stack.pop();
                    stack.push(j / i);
                    break;
                default:
                    stack.add(Integer.parseInt(token));
            }
        }
        return stack.pop();
    }
}
